<?php
/**
 * 一次性脚本：批量延长会员时间（按天）
 * 用法：
 *   http://你的域名/update_vip_plus_days.php?days=2
 * 原格式：yyyy年n月j日  例：2025年8月31日
 * 输出格式保持一致：yyyy年n月j日
 * 改完立即生效，用完可删除本文件
 */

header('Content-Type: application/json; charset=utf-8');

// 1. 引入数据库配置
$dbConfig = include('db_config.php');

// 2. 校验参数
$days = isset($_GET['days']) ? intval($_GET['days']) : null;
if ($days === null) {
    http_response_code(400);
    echo json_encode(['status' => 'error', 'message' => '缺少参数：days']);
    exit;
}

try {
    // 3. 建立 PDO 连接
    $dsn = "mysql:host={$dbConfig['host']};dbname={$dbConfig['dbname']};charset={$dbConfig['charset']}";
    $pdo = new PDO($dsn, $dbConfig['username'], $dbConfig['password']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 4. 取出所有记录
    $rows = $pdo->query("SELECT id, 会员时间 FROM mi_users")->fetchAll(PDO::FETCH_ASSOC);

    $updateStmt = $pdo->prepare("UPDATE mi_users SET 是否会员 = '真', 会员时间 = :newTime WHERE id = :id");

    $affected = 0;
    foreach ($rows as $row) {
        $oldTime = trim($row['会员时间']);
        $baseDate = null;

        // 4-1 解析原日期
        if ($oldTime !== '' && $oldTime !== '空') {
            // 匹配 yyyy年n月j日
            if (preg_match('/^(\d{4})年(\d{1,2})月(\d{1,2})日$/', $oldTime, $m)) {
                $y = (int)$m[1];
                $mo = (int)$m[2];
                $d = (int)$m[3];
                $baseDate = DateTime::createFromFormat('Y-n-j', "$y-$mo-$d");
            }
        }

        // 解析失败或为空 → 今天
        if (!$baseDate) {
            $baseDate = new DateTime('now', new DateTimeZone('Asia/Shanghai'));
        }

        // 4-2 加天数
        $baseDate->modify("{$days} day");
        $newTimeStr = $baseDate->format('Y年n月j日');

        // 4-3 写回数据库
        $updateStmt->execute([
            ':newTime' => $newTimeStr,
            ':id'      => $row['id']
        ]);
        $affected += $updateStmt->rowCount();
    }

    // 5. 返回结果
    echo json_encode([
        'status'  => 'success',
        'message' => "已批量更新会员时间，共 {$affected} 条记录",
        'days'    => $days
    ], JSON_UNESCAPED_UNICODE);

} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode([
        'status'  => 'error',
        'message' => '操作失败：' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}
?>
